home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / texte / 7up_pd / 7up3.c < prev    next >
Text File  |  1998-10-29  |  61KB  |  2,369 lines

  1. /*****************************************************************************
  2. *
  3. *                                              7UP
  4. *                            GEM-Texteditor für Atari ST und PC
  5. *                                         Modul: 7UP.C
  6. *                                     (c) by TheoSoft '90
  7. *                                Entwicklungsbegin: 01.07.90
  8. *                                Version 0.90b      : 26.09.90
  9. *                                Version 0.91b      : 29.09.90
  10. *                                Version 0.92b      : 08.10.90
  11. *                                Version 0.93b      : 16.10.90
  12. *                                Version 0.94b      : 31.10.90
  13. *                                Version 0.95b      : 01.11.90
  14. *                                Version 1.0          : 21.12.90
  15. *                                Version 1.01      : 25.12.90
  16. *                                Version 1.02      : 11.01.91
  17. *                                Version 2.00      : 28.06.91
  18. *                                Version 2.1 sw      : 31.10.92
  19. *                                Version 2.1          : 19.11.92
  20. *                                Version 2.11b      : 01.12.92
  21. *                                Version 2.15b      : 01.08.93 
  22. *                                Version 2.16b      : ? 
  23. *                                Version 2.17b      : ?    
  24. *                                Version 2.18b      : 01.11.93
  25. *                       Version 2.19b    : 07.12.93
  26. *                       Version 2.2      : 16.01.94 MAXON PD
  27. *                                Version 2.2      : 22.02.94 Golden Code
  28. *                                                         24.02.94 Bug "weiche CRs"
  29. *                                Version 2.3      : 23.02.95 Golden Code
  30. *                                Version 2.31     : 01.04.95 
  31. *                                Version 2.32     : 08.05.95 
  32. *     not released      Version 2.33     : 31.12.95 filegrep Zieldatei nicht nochmal auswerten
  33. *                       Freigabe der Sourcen Februar 1997
  34. *****************************************************************************/
  35. /*
  36. #define SHAREWARE
  37. */
  38. #include <portab.h>
  39. #include <stdio.h>
  40. #include <stdlib.h>
  41. #include <string.h>
  42. #include <ctype.h>
  43. #include <aes.h>
  44. #include <vdi.h>
  45.  
  46. #if GEMDOS
  47. #include <tos.h>
  48. #include <ext.h>
  49. #include "vaproto.h"
  50. #include "fsel_inp.h"
  51. #else
  52. #include <alloc.h>
  53. #include <dir.h>
  54. extern int _stklen=8*1024L;
  55. #endif
  56.  
  57. #include "alert.h"
  58.  
  59. #include "windows.h"
  60. #include "forms.h"
  61. #include "7UP.h"
  62. #include "undo.h"
  63. #include "version.h"
  64.  
  65. #include "language.h"
  66.  
  67. int open_work (int device);
  68. void close_work (int handle, int device);
  69. int Wtxtdraw(const register WINDOW *wp, int dir, int clip[]);
  70. int menu_ikey(OBJECT *m_tree, int kstate, int key, int *menu, int *item);
  71. void add_icon(OBJECT *tree, int icon);
  72. void ren_icon(OBJECT *tree, int icon);
  73. void del_icon(OBJECT *tree, int icon);
  74. void drag_icon(OBJECT *tree, int icon);
  75. void desel_icons(OBJECT *tree, int from, int to, int mode);
  76. void click_icon(OBJECT *tree, int icon);
  77. WINDOW *Wreadfile(char *name, int mode);
  78. WINDOW *Wnewfile(char *name);
  79. WINDOW *Wgetwind(register int wum);
  80. void write_file(WINDOW *wp, int newname);
  81. void write_block(WINDOW *wp, LINESTRUCT *beg, LINESTRUCT *end);
  82. void write_clip(WINDOW *wp,LINESTRUCT *beg,LINESTRUCT *end);
  83. int  read_block(WINDOW *wp,LINESTRUCT **beg,LINESTRUCT **end);
  84. int  read_clip(WINDOW *wp,LINESTRUCT **beg,LINESTRUCT **end);
  85. void print_block(WINDOW *wp, LINESTRUCT *beg, LINESTRUCT *end);
  86. void Wdefattr(WINDOW *wp);
  87. void Wsetrcinfo(WINDOW *wp);
  88. char *split_fname(char *pathname);
  89. hndl_prtmenu(OBJECT *tree, OBJECT *tree2, OBJECT *tree3, WINDOW *wp);
  90. Dredraw(OBJECT *tree, int obj, int depth);
  91. int desk_fkey(OBJECT *tree,int ks,int kr);
  92. int Dhndlfkt(OBJECT *tree, int x, int y);
  93. int get_args(int *argc, char *argv[]);
  94. void hndl_icons(OBJECT *tree, int mx, int my, int key, int click);
  95. int hndl_find(WINDOW *wp, LINESTRUCT **beg, LINESTRUCT **end, int item);
  96. int hndl_tab(OBJECT *tree, WINDOW *wp);
  97. void hndl_chartable(WINDOW *wp, OBJECT *tree);
  98. void hndl_fileinfo(WINDOW *wp, WINDOW *blkwp);
  99. void hndl_font(WINDOW *wp, OBJECT *tree);
  100. int hndl_config(OBJECT *tree, int start);
  101. void hndl_grepmenu(OBJECT *tree, int start);
  102. int getfilename(char *pathname, char * pattern, char *fname, const char *meldung);
  103. void gotomark(WINDOW *wp,long *mark);
  104. void hndl_keybd(int, int);
  105. void hndl_mesag(int mbuf[]);
  106. void hndl_menu(int menu, int item);
  107. int special(WINDOW *wp, WINDOW **blkwp, int state, int key, LINESTRUCT **begcut, LINESTRUCT **endcut);
  108.  
  109. void mark_line(WINDOW *wp, LINESTRUCT *str, int line);
  110. LINESTRUCT *beg_blk(WINDOW *wp, LINESTRUCT *cutbeg, LINESTRUCT *cutend);
  111. LINESTRUCT *end_blk(WINDOW *wp, LINESTRUCT **cutbeg, LINESTRUCT **cutend);
  112. int cut_blk(WINDOW *wp, LINESTRUCT *cutbeg, LINESTRUCT *cutend);
  113. int copy_blk(WINDOW *wp, LINESTRUCT *cutbeg, LINESTRUCT *cutend, LINESTRUCT **copybeg, LINESTRUCT **copyend);
  114. void paste_blk(WINDOW *wp,LINESTRUCT *beg,LINESTRUCT *end);
  115. int ins_string(WINDOW *wp, char *str);
  116. int ins_line(WINDOW *wp);                                  /* neue zeile einfügen */
  117. int backspace(WINDOW *wp,LINESTRUCT *line);          /* zeichen löschen */
  118. int del_char(WINDOW *wp,LINESTRUCT *line);            /* zeichen löschen */
  119. int del_line(WINDOW *wp);                                  /* zeile löschen */
  120. int cat_line(WINDOW *wp);                                  /* zeilen verbinden */
  121. void hide_blk(WINDOW *wp,LINESTRUCT *beg,LINESTRUCT *end);
  122. void free_blk(WINDOW *wp,LINESTRUCT *line);
  123. void shlf_line(WINDOW *wp, LINESTRUCT *begcut,  LINESTRUCT *endcut);
  124. void shrt_line(WINDOW *wp, LINESTRUCT *begcut,  LINESTRUCT *endcut);
  125. int adjust_best_position(WINDOW *wp);
  126. refresh(WINDOW *wp, LINESTRUCT *line, int col, int row);
  127. int editor(WINDOW *wp, int state, int key, LINESTRUCT **begcut, LINESTRUCT **endcut);
  128. int Wmarkblock(WINDOW *wp, LINESTRUCT **begcut, LINESTRUCT **endcut, int e_mx, int e_my);
  129. int Wdclick(WINDOW *wp, LINESTRUCT **begcut, LINESTRUCT **endcut, int mx, int my);
  130. void checkmenu(OBJECT *tree, WINDOW *wp);
  131. char *change_ext(char *name, char *ext);
  132. char *change_name(char *name, char *newname);
  133. WINDOW *Wreadtempfile(char *filename, int mode);
  134. void loadfiles(char *path, char *pattern);
  135. char *find_7upinf(char *path, char *ext, int mode);
  136. void hndl_textformat(WINDOW *wp, OBJECT *tree, LINESTRUCT **begcut, LINESTRUCT **endcut);
  137.  
  138. WINDOW *Wgetwp(char *filename);
  139. WINDOW *Wmentry(int mentry);
  140.  
  141. #define TEXT      0  /* windowtype */
  142. #define GRAPHIC  1
  143. #define PRT        0
  144. #define DESK      0
  145. #define TRUE      1
  146. #define FALSE     0
  147. #define VERTICAL    1
  148. #define HORIZONTAL 2
  149. #define notnull(a) ((a>0)?(a):(1))
  150.  
  151. #define BELL 7
  152.  
  153. #define EXOB_TYPE(x) (x>>8)
  154.  
  155. #define SPOOLER_ACK 101
  156.  
  157. #if MSDOS
  158. int contrl[12],intin[STRING_LENGTH+1],intout[128],ptsin[128],ptsout[128];
  159. #endif
  160.  
  161. int gl_apid;
  162. int aeshandle,vdihandle,userhandle,exitcode=0;
  163. int xdesk,ydesk,wdesk,hdesk;
  164. int msgbuf[8];
  165. int charw,charh,boxw,boxh,norm_point,small_point;
  166. int work_in[103],work_out[57];
  167. int topwin=FALSE;
  168. int terminate_at_once=FALSE;
  169.  
  170. unsigned long backuptime=0XFFFFFFFFL; /* timer für autom. Backup */
  171. unsigned long codeid=0x12345678L;
  172.  
  173.  
  174. /* AVSTUFF *****************************************************************/
  175.  
  176. #define AP_TERM        50      /* MultiTOS Shutdown */
  177. #define AV_PROTOKOLL 0x4700
  178. #define AV_SENDKEY    0x4710
  179. int av_font=1;
  180. int av_point=10;
  181. int umlautwandlung=FALSE,toolbar_zeigen=FALSE,scrollreal;
  182.  
  183. /***************************************************************************/
  184. /* in diesen Speicherbereich sollen die Konfigurationen geschrieben werden */
  185. int clipbrd=TRUE;
  186. int nodesktop,vastart;
  187.  
  188. /* hier sind die Iconpositionen abgespeichert */
  189. typedef struct
  190. {
  191.     int x,y;
  192. }ICNCOORDS;
  193.  
  194. ICNCOORDS iconcoords[]=
  195. {
  196.   0,0, /* 1 */
  197.   0,0, /* 2 */
  198.   0,0, /* 3 */
  199.   0,0, /* 4 */
  200.   0,0, /* 5 */
  201.   0,0, /* 6 */
  202.   0,0, /* 7 */
  203.   0,0, /* Papierkorb */
  204.   0,0, /* Drucker     */
  205.   0,0, /* Diskette    */
  206.   0,0  /* Klemmbrett */
  207. };
  208.  
  209. /***************************************************************************/
  210.  
  211. #define SINGLECLICK 1
  212. #define DOUBLECLICK 2
  213. #define TRIPLECLICK 3
  214. #define LEFTBUTTON  1
  215. #define RIGHTBUTTON 2
  216. #define LEFTPRESS    1
  217. #define RIGHTPRESS  2
  218.  
  219. #define SCREEN            1
  220. #define PLOTTER         11
  221. #define PRINTER         21
  222. #define METAFILE        31
  223. #define CAMERA          41
  224. #define TABLET          51
  225.  
  226. #define E_TIME 500L
  227.  
  228. static MEVENT mevent=
  229. {
  230.     MU_MESAG|MU_TIMER|MU_KEYBD|MU_BUTTON|MU_M1,
  231. /*
  232.     0x0102,3,0,
  233. */
  234.     TRIPLECLICK,1,1,
  235.     1,0,0,1,1,
  236.     0,0,0,0,0,
  237.     msgbuf,
  238.     E_TIME,
  239.     0,0,0,0,0,0,
  240. /* nur der Vollständigkeit halber die Variablen von XGEM */
  241.     0,0,0,0,0,
  242.     0,
  243.     0L,
  244.     0L,0L
  245. };
  246.  
  247. static unsigned long timer=0L; /* für Autosave */
  248.  
  249. extern char iostring[];
  250. extern WINDOW _wind[MAXWINDOWS];
  251.  
  252. char alertstr[256];
  253. extern char searchstring[];
  254. extern int bl,pexec,WI_KIND,tabexp;
  255. extern actbutcolor, dialbgcolor;
  256. /*
  257. extern long *ckbd; /*Compose Keyboard von Pascal Fellerich*/
  258. */
  259. long *winx;
  260.  
  261. extern OBJECT *winmenu,*prtmenu,*popmenu,
  262.                   *desktop,*findmenu,*gotomenu,
  263.                   *fontmenu,*tabmenu,*infomenu,
  264.                   *copyinfo,*shellmenu,*chartable,
  265.                   *shareware,*shell2,*fkeymenu,
  266.                   *umbrmenu,*pinstall,*preview,
  267.                   *layout,*markmenu,*grepmenu,
  268.                   *divmenu,*bracemenu,*sortmenu,
  269.                   *nummenu,*picklist,*registmenu,
  270.                   *formatmenu;
  271.  
  272. extern long begline, endline, lasthfirst;
  273. extern LINESTRUCT *lastwstr;
  274.  
  275. WINDOW *blkwp=NULL;
  276. LINESTRUCT *begcut=NULL, *endcut=NULL, *begcopy=NULL, *endcopy=NULL;
  277. int            cut=FALSE;
  278. int         registriert;
  279.  
  280. int open_work (int device)
  281. {
  282.     register int i;
  283.     int handle;
  284.  
  285. #if MSDOS
  286.     void *l=NULL;
  287.     long size;
  288. #endif
  289.  
  290.     for (i = 0; i < 103; i++) work_in [i] = 1;
  291.     work_in [0]  = device;                                 /* device handle */
  292.     work_in [10] = 2;                                 /* Raster Koordinaten */
  293.  
  294.     if (device == SCREEN)
  295.     {
  296. #if MSDOS
  297.       size=farcoreleft()-16*1024L;
  298.       if(size<0)
  299.           return(-1);
  300.       l=farmalloc(size);  /*16*/
  301. #endif
  302.       handle=aeshandle;
  303.       v_opnvwk (work_in, &handle, work_out);      /* virtuell öffnen */
  304. #if MSDOS
  305.       farfree(l);
  306. #endif
  307.     }
  308.     else                                                     /* nicht Bildschirm */
  309.     {
  310. #if MSDOS
  311.       work_in [11] = 255;     /* OW_NOCHANGE parallel or serial port */
  312. #endif
  313.       v_opnwk (work_in, &handle, work_out);  /* physikalisch öffnen */
  314.     }
  315.     return (handle);
  316. }
  317.  
  318. void close_work (int handle, int device)
  319. {
  320.   switch (device)
  321.   {
  322.      case SCREEN:
  323.          v_clsvwk (handle);
  324.          break;
  325.      default:
  326.          v_clswk (handle);
  327.          break;
  328.   }
  329. }
  330.  
  331. void Wmarkline(WINDOW *wp, LINESTRUCT *line, int fchar, int x, int y)
  332. {
  333.     register int width, pxyarray[4];
  334.  
  335.     if(!(width=(line->endcol-line->begcol)))
  336.         return;
  337.  
  338.     pxyarray[0]=x - wp->wfirst + line->begcol*wp->wscroll;
  339.     pxyarray[1]=y;
  340.     pxyarray[2]=pxyarray[0] + width*wp->wscroll -1;
  341.     pxyarray[3]=pxyarray[1] + wp->hscroll -1;
  342.     vsf_color(wp->vdihandle,BLACK);
  343.     vswr_mode(wp->vdihandle,MD_XOR);
  344.     vr_recfl (wp->vdihandle,pxyarray);        /* markieren */
  345.     vsf_color(wp->vdihandle,WHITE);
  346.     vswr_mode(wp->vdihandle,MD_REPLACE);
  347. }
  348.  
  349. int Wtxtdraw(const register WINDOW *wp, int dir, int clip[])
  350. {
  351.     static int oldeffect = 0;
  352.     
  353.     register int fline,lline,i,fchar;
  354.     int x,y,dummy;
  355.     register LINESTRUCT *line;
  356.     char c;
  357.         
  358.     extern WINDOW *twp;
  359.     
  360.     x = wp->xwork;                  /* x-Koordinate für alle Zeilen */
  361.     y = wp->ywork;
  362.     fchar=wp->wfirst/wp->wscroll;
  363.     fline = wp->hfirst/wp->hscroll;
  364.     lline = fline + wp->hwork/wp->hscroll;
  365.  
  366.     if(lline > wp->hsize/wp->hscroll)
  367.         lline=wp->hsize/wp->hscroll;
  368.  
  369.     line=wp->wstr;
  370. /*
  371.     vs_clip(wp->vdihandle,TRUE,clip);
  372. */
  373.     vr_recfl(wp->vdihandle,clip);                /* weißes rechteck in workspace */
  374.  
  375.     twp=wp; /* topwindow setzen, damit userdef Tabbar zeichnen kann */
  376.     
  377.    if(wp->toolbar && (dir==(HORIZONTAL+VERTICAL)))
  378.    {
  379.         if(EXOB_TYPE(wp->toolbar->ob_type) == 1) /* senkrecht */
  380.         {
  381.             wp->toolbar->ob_x     =wp->xwork-wp->toolbar->ob_width-wp->wscroll/2;
  382.             wp->toolbar->ob_y     =wp->ywork;
  383.             wp->toolbar->ob_height=wp->hwork;
  384.           objc_draw(wp->toolbar, ROOT, MAX_DEPTH,
  385.               clip[0], clip[1],    clip[2]-clip[0]+1, clip[3]-clip[1]+1);
  386.         }
  387.         else
  388.         {
  389.             wp->toolbar->ob_x    =wp->xwork-wp->wscroll/2;
  390.             wp->toolbar->ob_y    =wp->ywork-wp->toolbar->ob_height;
  391.             wp->toolbar->ob_width=wp->wwork+wp->wscroll/2;
  392.             wp->toolbar->ob_height--;
  393.           objc_draw(wp->toolbar, ROOT, MAX_DEPTH,
  394.               clip[0], clip[1],    clip[2]-clip[0]+1, clip[3]-clip[1]+1);
  395.             wp->toolbar->ob_height++;
  396.         }
  397.    }
  398.  
  399.     for(i=fline; i<lline && line ; i++, line=line->next, y+=wp->hscroll)
  400.     {
  401.         if((y + wp->hscroll)>clip[1] && y<clip[3])
  402.         {
  403.             if(fchar < line->used)
  404.             {
  405. /*            
  406.                 if((line->attr & TABCOMP) && tabexp)
  407.                 {
  408.                     stpexpan(iostring, &line->string[fchar], wp->tab, STRING_LENGTH,&dummy);
  409.                     outtext(wp->vdihandle,x,y,iostring,
  410.                         strlen(iostring),wp->wwork,wp->wscroll);
  411.                 }
  412.                 else
  413. */
  414. /*    
  415.                     if(line->effect != oldeffect) /* normal, fett, kursiv */
  416.                     {
  417.                         vst_effects(wp->vdihandle, line->effect);
  418.                         oldeffect = line->effect;
  419.                     }
  420. */
  421.                     v_gtext(wp->vdihandle,x,y,&line->string[fchar]);  /* ...normale ausgabe */    
  422.             }
  423.             if(line->attr & SELECTED)
  424.                 Wmarkline(wp,line,fchar,x,y);
  425.         }
  426.     }
  427.     
  428.     if(scrollreal)
  429.     {
  430.         if(dir&HORIZONTAL)
  431.         {
  432.             Wslupdate(wp,1);
  433.             Wtabbarupdate(wp);
  434.         }
  435.         if(dir&VERTICAL)
  436.             Wslupdate(wp,2);
  437.     }
  438.  
  439.     return(TRUE);
  440. }
  441.  
  442. #if MSDOS
  443. void aesbug(void)
  444. {
  445.     /*====================================================================
  446.         Added this code to have at least one evnt_multi call
  447.         using all flags ...
  448.     ====================================================================*/
  449.     WORD m_wait1,m_wait2,mousex,mousey,bstate,kstate,kreturn,bclicks;
  450.     WORD msgpipe[8],m_rect1[4],m_rect2[4];
  451.  
  452.     m_rect1[0]=m_rect1[1]=m_rect1[2]=m_rect1[3]=1;
  453.     m_rect2[0]=m_rect2[1]=m_rect2[2]=m_rect2[3]=1;
  454.     m_wait1=m_wait2=1;
  455.  
  456.     evnt_multi(0xFFFF, 0x02, 0x01, 0x01,
  457.                  m_wait1, m_rect1[0], m_rect1[1], m_rect1[2], m_rect1[3],
  458.                  m_wait2, m_rect2[0], m_rect2[1], m_rect2[2], m_rect2[3],
  459.                  (msgpipe), 100, 0,
  460.                  &mousex, &mousey, &bstate, &kstate,
  461.                  &kreturn, &bclicks);
  462. }
  463. #endif
  464.  
  465. int Menu_icheck(OBJECT *tree, int item, int checkit) /* Häkchen für DOS */
  466. {
  467.     if(checkit)
  468.     {
  469.         tree[item].ob_flags |= CHECKED;
  470.         *(char *)tree[item].ob_spec.index=0x08;
  471.         return(1);
  472.     }
  473.     else
  474.     {
  475.         tree[item].ob_flags &= ~CHECKED;
  476.         *(char*)tree[item].ob_spec.index=' ';
  477.         return(0);
  478.     }
  479. }
  480.  
  481. int Menu_ienable(OBJECT *tree, int item, int mode)
  482. {
  483.     if(mode)
  484.     {
  485.         tree[item].ob_state&=~DISABLED;
  486.         return(1);
  487.     }
  488.     else
  489.     {
  490.         tree[item].ob_state|=DISABLED;
  491.         return(0);
  492.     }
  493. }
  494.  
  495. void Wdefattr(WINDOW *wp)
  496. {
  497.     int ret;
  498.     if(wp)
  499.     {
  500.         vst_alignment(wp->vdihandle,0,5,&ret,&ret); /* Ausrichtung */
  501.         vst_rotation(wp->vdihandle,0);
  502.         vswr_mode(wp->vdihandle,MD_REPLACE);             /* replace */
  503.         vsf_interior(wp->vdihandle,FIS_SOLID);             /* Füllung */
  504.         vsf_color(wp->vdihandle,WHITE);                  /* farbe weiß */
  505.         vst_color(wp->vdihandle,BLACK);
  506.         vst_point(wp->vdihandle,wp->fontsize,&ret,&ret,&ret,&ret);
  507.         vqt_width(wp->vdihandle,'W',&wp->wscroll,&ret,&ret);  /* Breite der Zeichen */
  508.     }
  509. }
  510.  
  511. void Wcbattr(int handle)                     /* Cursor- und Blockschreibattibute */
  512. {
  513.     int ret;
  514.     vswr_mode    (handle,MD_XOR);            /* Cursor */
  515.     vsf_interior(handle,FIS_SOLID);
  516.     vsf_color    (handle,BLACK);
  517.  
  518.     vsl_type     (handle, USERLINE);        /* Iconrahmen */
  519.     vsl_width    (handle, 1);
  520.     vsl_color    (handle, BLACK);
  521.     vsl_ends     (handle, SQUARED, SQUARED);
  522.  
  523.     vst_alignment(handle,0,5,&ret,&ret); /* Ausrichtung */
  524.     vst_point(handle,10,&ret,&ret,&ret,&ret);
  525. }
  526.  
  527. static int getsysfontheight(int handle, 
  528.                             int id, 
  529.                             int *npoint,
  530.                             int *spoint,
  531.                             int boxw, int boxh)
  532. {
  533.     int pt=0,ch,cw,ch2,cw2,ret;
  534.    if(_GemParBlk.global[0]>=0x0399)
  535.    {
  536.       appl_getinfo(0,&pt,&ret,&ret,&ret);
  537.         vst_height(handle,pt,&ret,&ret,&cw2,&ch2);
  538.         pt=0;
  539.         do
  540.         {
  541.             vst_point(handle,++pt,&ret,&ret,&cw,&ch);
  542.             if (pt > 99)
  543.             {
  544.             Cconws("\33HUngeeigneter Systemfont! Programmende.  ");
  545.               exit(-1);
  546.             }
  547. #ifdef DEBUG
  548. printf("pt=%2d - ch=%2d ch2=%2d cw=%2d cw2=%2d\n", pt, ch, ch2, cw, cw2);
  549. #endif
  550.         }
  551.         while(!(ch==ch2 && cw==cw2));
  552.       *npoint=pt;
  553.       
  554.       appl_getinfo(1,&pt,&ret,&ret,&ret);
  555.       *spoint=pt;
  556.    }
  557.    else
  558.    {
  559.         do
  560.         {
  561.             vst_point(handle,++pt,&ret,&ret,&cw,&ch);
  562.             if (pt > 99)
  563.             {
  564.             Cconws("\33HUngeeigneter Systemfont! Programmende.  ");
  565.               exit(-1);
  566.             }
  567. #ifdef DEBUG
  568. printf("pt=%2d - ch=%2d boxh=%2d cw=%2d boxw=%2d\n", pt, ch, boxh, cw, boxw);
  569. #endif
  570.         }
  571.         while(!(ch==boxh && cw==boxw));
  572.         *npoint = pt;
  573.         *spoint = 8;
  574.     }
  575.     return(pt);
  576. }
  577.  
  578. #define _CONTERM 1156L
  579.  
  580. long _keyoff(void)
  581. {
  582.     *(unsigned char *)_CONTERM &= ~2; /* Autorepeat aus */
  583. }
  584.  
  585. long _keyon(void)
  586. {
  587.     *(unsigned char *)_CONTERM |=  2; /* Autorepeat ein */
  588. }
  589.  
  590. void pexit(void)
  591. {
  592.    int attr[10];
  593.    
  594.     graf_mouse(BUSY_BEE,0L);
  595.     append_picklist(picklist, NULL,0L); /* Pickliste erweitern */
  596. /*
  597.     writenames(); /* Dateinamen sichern */
  598. */
  599.     sicons();      /* Iconpositionen sichern */
  600.     Wnew();                                 /* alles dicht machen */
  601.     if((mevent.e_ks & (K_RSHIFT|K_LSHIFT)) ||
  602.         (divmenu[DIVSAVE].ob_state & SELECTED))
  603.         saveconfig(TRUE);
  604.     if(!nodesktop)
  605.         wind_set(0,WF_NEWDESK,0,0,0,0);
  606. #if MiNT
  607.     wind_update(BEG_UPDATE);
  608. #endif
  609.     menu_bar(winmenu,FALSE);
  610. #if MiNT
  611.     wind_update(END_UPDATE);
  612. #endif
  613. #if GEMDOS
  614.     vqt_attributes(aeshandle,attr);
  615.     if (vq_gdos() /*&& (attr[0]!=1)*/)
  616.       vst_unload_fonts(userhandle,0);
  617.     AVExit(gl_apid); /* abmelden */
  618.     Supexec(_keyon);
  619. #endif
  620.     close_work(userhandle,SCREEN); /**/
  621.     close_work(vdihandle,SCREEN);
  622.     graf_mouse(ARROW,0L);
  623.     appl_exit();
  624. }
  625.  
  626. void pinit(char *inffile)
  627. {
  628.     int i,ret,wh,attr[10];
  629.     char pathname[PATH_MAX];
  630. #if MSDOS
  631.     char path[PATH_MAX],name[FILENAME_MAX],string[PATH_MAX];
  632. #endif
  633.  
  634.     gl_apid=appl_init();
  635.     if(gl_apid < 0)
  636.         exit(-1);
  637.     graf_mouse(BUSY_BEE,0L);
  638. #if GEMDOS
  639.     if(pexec)
  640.     {
  641.         if(_GemParBlk.global[0]>=0x0104) /* evtl. Deskaccessories schließen */
  642.         {
  643.             wind_update(BEG_UPDATE);
  644.             wind_new();
  645.         }
  646.         else
  647.         {
  648.             do
  649.             {
  650.                 _wind_get(0,WF_TOP,&wh,&i,&i,&i);
  651.                 if(wh>0)
  652.                 {
  653.                     wind_close(wh);
  654.                     wind_delete(wh);
  655.                 }
  656.             }
  657.             while(wh>0);
  658.         }
  659.     }
  660. #endif
  661.     wind_update(BEG_UPDATE);
  662.     _wind_get(DESK,WF_WORKXYWH,&xdesk,&ydesk,&wdesk,&hdesk);
  663.     aeshandle=graf_handle(&boxw,&boxh,&charw,&charh);
  664.     vdihandle=open_work(SCREEN);
  665.     Wcbattr(vdihandle);
  666.     userhandle=open_work(SCREEN);
  667.  
  668.     vqt_attributes(aeshandle,attr);
  669. #if GEMDOS
  670.     if (vq_gdos() /*&& (attr[0]!=1)*/)
  671.       vst_load_fonts(userhandle,0);
  672. #endif
  673.     vst_font(userhandle,attr[0]); /* Systemfont einstellen */
  674.  
  675. #ifdef DEBUG
  676. printf("grafhandle boxh=%2d boxw=%2d\n", boxh, boxw);
  677. #endif
  678.  
  679. #ifdef DEBUG
  680. printf("Systemfont Id=%2d\n", attr[0]);
  681. #endif
  682.  
  683.     getsysfontheight(userhandle, attr[0], &norm_point, &small_point, boxw, boxh);
  684.  
  685. #ifdef DEBUG
  686. printf("Systemfont normal=%2dpt, small=%2dpt\n", norm_point, small_point);
  687. #endif
  688.  
  689.     for(i=1;i<MAXWINDOWS;i++)
  690.     {
  691. /*        _wind[i].fontid  =attr[0];
  692. */
  693.         _wind[i].fontsize=norm_point;/*font einstellen*/
  694.     }
  695.  
  696.     /* Font für AV_PROTOKOLL */
  697.     av_font=attr[0];
  698.     av_point=norm_point;
  699. #if GEMDOS
  700.  
  701.     actbutcolor=WHITE;
  702.     dialbgcolor=WHITE;
  703.     if(_GemParBlk.global[0]>=0x0340 /*&& mindestens_16_Farben()*/)
  704.     {  /* erst prüfen, ob implementiert */
  705.         if(objc_sysvar(0,4/*ACTBUTCOL*/,0,0,&actbutcolor,&ret)>0)
  706.             objc_sysvar(0,5/*BACKGRCOL*/,0,0,&dialbgcolor,&ret);
  707.         else
  708.             actbutcolor=WHITE;
  709.     }
  710.  
  711.     if(_GemParBlk.global[0] >= 0x0400)
  712.         shel_write(9,1,0,"","");          /* AP_TERM anmelden */
  713. #endif
  714.  
  715.     if(!rsrc_init("7UP.RSC",inffile))
  716.     {
  717.          form_alert(1,A7up[0]);
  718.          close_work(userhandle,SCREEN); /**/
  719.          close_work(vdihandle,SCREEN);
  720.          wind_update(END_UPDATE);
  721.          appl_exit();
  722.          exit(-1);
  723.     }
  724. #if MSDOS
  725.     shel_rdef(name,path);/* Pfadnamen zum Nachladen von DESKTOP.APP setzen */
  726.     if(!strcmp(name,"7UP.APP"))
  727.     {
  728.         strcpy(string,"DESKTOP.APP");
  729.         shel_find(string);
  730.         string[strlen(string)-strlen("DESKTOP.APP")]=0;
  731.         shel_wdef("DESKTOP.APP",string);
  732.     }
  733. #endif
  734.  
  735.     graf_mouse(ARROW,0L);
  736.     wind_update(END_UPDATE);
  737. #if MSDOS        /* NIEMALS mit GEMDOS wg. AV_PROTOKOLL */
  738.     aesbug();
  739. #endif
  740.  
  741. }
  742.  
  743. void Wwindmsg(WINDOW *wp, int *msgbuf)
  744. {
  745.     int ret,mouse_click,desk_obj;
  746.     void hndl_button();
  747.  
  748.     graf_mouse(M_OFF,NULL);
  749.     Wcursor(wp);
  750.     switch(msgbuf[0])
  751.     {
  752.         case WM_ARROWED:
  753. /*
  754.             _Warrow(wp,msgbuf); /* incl. WinX-Unterstützung */
  755. */
  756.             if(winx)
  757.             {
  758.                 graf_mouse(M_OFF,NULL);
  759.                 Warrow(wp,msgbuf[4]);
  760.                 graf_mouse(M_ON,NULL);
  761.             }
  762.             else
  763.             {
  764.                 graf_mouse(M_ON,NULL);
  765.                 wind_update(BEG_MCTRL);
  766.                 do
  767.                 {
  768.                     graf_mouse(M_OFF,NULL);
  769.                     Warrow(wp,msgbuf[4]);
  770.                     graf_mouse(M_ON,NULL);
  771.                     graf_mkstate(&ret,&ret,&mouse_click,&ret);
  772.                 }
  773.                 while(mouse_click & 1); /* linke Taste */
  774.                 wind_update(END_MCTRL);
  775.                 graf_mouse(M_OFF,NULL);
  776.             }
  777.             undo.item=FALSE;
  778.             break;
  779.         case WM_REDRAW:
  780.             Wredraw(wp,&msgbuf[4]);
  781.             break;
  782. /* Fehler: hat nichts mit WM_TOPPED zu tun und führte zu einer
  783.     Änderung in MultiTOS seitens Atari. Absolut lachhaft, diese
  784.     Diletanten. Die ändern TOS wg. 7UP!
  785.         case WM_NEWTOP:
  786. */
  787.         case WM_TOPPED:
  788.             Wtop(wp);
  789.             checkmenu(winmenu,Wgettop());
  790.             undo.item=FALSE;
  791.             break;
  792.         case 33/*WM_BOTTOMED*/:
  793.             Wbottom(wp); /* WiNX 14.4.94 */
  794.             break;
  795.         case WM_ONTOP:          /* 7UP wurde nach oben gebracht */
  796.             inst_trashcan_icon(desktop,DESKICN8,DESKICND,FALSE);
  797.             inst_clipboard_icon(desktop,DESKICNB,DESKICNC,FALSE);
  798.             break;
  799.         case WM_MOVED:
  800.         case WM_SIZED:
  801.             Wmovesize(wp,&msgbuf[4]);
  802.             undo.item=FALSE;
  803.             break;
  804.         case WM_VSLID:
  805.             Wslide(wp,msgbuf[4],VSLIDE);
  806.             undo.item=FALSE;
  807.             break;
  808.         case WM_HSLID:
  809.             Wslide(wp,msgbuf[4],HSLIDE);
  810.             undo.item=FALSE;
  811.             break;
  812.         case WM_FULLED:
  813.             if(mevent.e_ks & (K_LSHIFT|K_RSHIFT))
  814.                 Wadjust(wp);
  815.             else
  816.                 Wfull(wp);
  817.             undo.item=FALSE;
  818.             break;
  819.         /* 11.9.1993 */
  820.         case WM_ICONIFY:
  821.             /*Wiconify(wp,&msgbuf[4]);*/
  822.             undo.item=FALSE;
  823.             break;
  824.         case WM_UNICONIFY:
  825.             /*Wuniconify(wp,&msgbuf[4]);*/
  826.             undo.item=FALSE;
  827.             break;
  828.         case WM_ALLICONIFY:
  829.             undo.item=FALSE;
  830.             break;
  831.         case WM_CLOSED:
  832. /* Iconifytest
  833.             if(mevent.e_ks & (K_LSHIFT|K_RSHIFT))
  834.             {
  835.                 wind_calc(WC_BORDER,wp->kind,
  836.                         wp->xwork+16,wp->ywork+16,72,72,
  837.                         &msgbuf[4],&msgbuf[5],&msgbuf[6],&msgbuf[7]);
  838.                if(wp->w_state & ICONIFIED)
  839.                    Wuniconify(wp,&msgbuf[4]);
  840.                else
  841.                    Wiconify(wp,&msgbuf[4]);
  842.            }
  843.             else
  844. */
  845.                 Wclose(wp);
  846.             checkmenu(winmenu,Wgettop());
  847.             undo.item=FALSE;
  848.             break;
  849.     }
  850. WEITER:
  851.     Wcursor(wp);
  852.     graf_mouse(M_ON,NULL);
  853.     return;
  854. }
  855.  
  856. int delete(WINDOW *wp, OBJECT *tree, int desk_obj)
  857. {
  858.     char filename[PATH_MAX];
  859.     if(wp && wp->w_state & CHANGED)
  860.     {
  861.         sprintf(alertstr,A7up[1],split_fname((char *)Wname(wp)));
  862.         switch(form_alert(3,alertstr))
  863.         {
  864.             case 1:
  865.                 wp->w_state&=~CHANGED;
  866.                 break;
  867.             case 2:
  868.                 return(FALSE);
  869.             case 3:
  870.                 write_file(wp, FALSE);
  871.                 strcpy(filename,(char *)Wname(wp));
  872.                 unlink(change_ext(filename,".$$$")); /* <NAME>.$$$ löschen */
  873.                 break;
  874.         }
  875.     }
  876.     append_picklist(picklist, (char *)Wname(wp),wp->row + /* Pickliste erweitern */
  877.                                                  wp->hfirst/wp->hscroll + 1); 
  878.     del_icon(tree, desk_obj);
  879.     Wfree(wp);
  880.     Wdelete(wp);
  881.     Menu_ienable(winmenu,WINNEW,TRUE);    /* Menueintrag wieder freigeben */
  882.     Menu_ienable(winmenu,WINOPEN,TRUE);
  883.     return(TRUE);
  884. }
  885.  
  886. extern char errorstr[]; /* hier wird eine evtl. Fehlermeldung eingeblendet */
  887.  
  888. void hndl_mesag(int mbuf[])
  889. {
  890.     if( mbuf[0] != MN_SELECTED ) /* WINDOW MESSAGES */
  891.     {
  892.         if(mbuf[0]>=AC_OPEN)
  893.             hndl_AVProt(mbuf);
  894.         else
  895.             Wwindmsg(Wp(mbuf[3]),mbuf);
  896.     }
  897.     else
  898.         hndl_menu(mbuf[3],mbuf[4]);
  899. }
  900.  
  901. void hndl_menu(int menu, int item)
  902. {
  903.     WINDOW *wp;
  904.     int newname=FALSE;
  905.     int i,k,wh,desk_obj,exit_obj,overwrite=FALSE,abbruch;
  906.     struct ffblk fileRec;
  907.     char *cp,filename[PATH_MAX],tempname[PATH_MAX];
  908.     static char fpattern[FILENAME_MAX]="*.*";
  909.  
  910. #if GEMDOS
  911. #define MAXPATHS 7
  912.     extern char lpath[MAXPATHS][PATH_MAX];
  913.     extern char *lname[MAXPATHS];
  914.     extern SLCT_STR *slct;
  915. #endif
  916.  
  917.     extern int windials;
  918.  
  919.         wp=Wgettop();
  920.         switch(item)
  921.         {
  922.             case WINABOUT:
  923.                 strcpy(alertstr,__DATE__);
  924.                 alertstr[3]=alertstr[6]=0;
  925.                 sprintf((char *)copyinfo[CDATE].ob_spec.index,
  926. #ifdef ENGLISH
  927.                     "  Version 2.32 %s %s. %s",&alertstr[0],&alertstr[4],&alertstr[7]);
  928. #else
  929.                     "  Version 2.32 %s. %s %s",&alertstr[4],&alertstr[0],&alertstr[7]);
  930. #endif
  931. /*
  932.                 if(!registriert)
  933.                     shareware[SHAREREGIST].ob_flags |= HIDETREE;
  934. */
  935. #if GEMDOS
  936.                 if(!windials)
  937.                 {
  938.                     if(form_exhndl(copyinfo,0,0) == CINFO)
  939.                         if(form_exhndl(shareware,0,0) == SHAREREGIST)
  940.                         {
  941.                             if(form_exhndl(registmenu,0,0) == REGISTOK)
  942.                                registriert = registerprogram("7UP.KEY");
  943.                         }
  944.                 }
  945.                 else
  946. #endif
  947.                     if(form_exhndl(copyinfo,0,0)==CINFO)
  948.                     {
  949.                         if(windials)
  950.                         {
  951.                             graf_mouse(M_OFF,0L);
  952.                             Wcursor(wp);         /* ausschalten */
  953.                             evnt_event(&mevent); /* Dummyaufruf um Redraw zu killen */
  954.                             Wredraw(wp,&msgbuf[4]);
  955.                             Wcursor(wp);
  956.                             graf_mouse(M_ON,0L);
  957.                             msgbuf[3]=3; /* Menütitel wird überschrieben */
  958.                         }
  959.                         if(form_exhndl(shareware,0,0)==SHAREREGIST)
  960.                         {
  961.                             if(windials)
  962.                             {
  963.                                 graf_mouse(M_OFF,0L);
  964.                                 Wcursor(wp);         /* ausschalten */
  965.                                 evnt_event(&mevent); /* Dummyaufruf um Redraw zu killen */
  966.                                 Wredraw(wp,&msgbuf[4]);
  967.                                 Wcursor(wp);
  968.                                 graf_mouse(M_ON,0L);
  969.                                 msgbuf[3]=3; /* Menütitel wird überschrieben */
  970.                             }
  971.                             if(form_exhndl(registmenu,0,0) == REGISTOK)
  972.                                registriert = registerprogram("7UP.KEY");
  973.                         }
  974.                     }
  975.                 break;
  976.             case WINNEW:
  977.                 Wnewfile(NAMENLOS);
  978.                 break;
  979.             case WINOPEN:
  980.                 if(is_selected(desktop,DESKICN1,DESKICND))
  981.                 {
  982.                     for(desk_obj=DESKICN1; desk_obj<=DESKICND; desk_obj++)
  983.                     {
  984.                         if(desktop[desk_obj].ob_state & SELECTED)
  985.                         {
  986.                             click_icon(desktop,desk_obj);
  987.                         }
  988.                     }
  989.                 }
  990.                 else
  991.                 {
  992.                     loadfiles("","");
  993.                 }
  994.                 break;
  995.             case WINPICK:
  996.                 hndl_picklist(picklist);
  997.                 break;
  998.             case WINREAD:
  999.                 if(wp && !begcut && !endcut)
  1000.                 {
  1001. /* mit SELECTRIC ist gewählte die Reihenfolge nicht gewährleistet */
  1002. #if GEMDOS
  1003.                     if( slct_check(0x0100))
  1004.                     {
  1005.                          slct_morenames(0, MAXPATHS,lname); /* we want more */
  1006.                      }
  1007. #endif
  1008.                     filename[0]=0;
  1009.                     if(!getfilename(filename,fpattern,"",fselmsg[0]))
  1010.                         break;
  1011.                     if(!filename[0]) /* Kunde will nicht */
  1012.                         break;
  1013. #if GEMDOS
  1014.                     if(slct && (slct->out_count>1))
  1015.                     {
  1016.                         slct->out_count=min(slct->out_count,MAXPATHS);
  1017.                         for(i=0; i<slct->out_count; i++)
  1018.                         {  /* Pfadnamen zusammenbasteln */
  1019.                             if((cp=strrchr(filename,'\\'))!=NULL || (cp=strrchr(filename,'/'))!=NULL)
  1020.                             {
  1021.                                 cp[1]=0;
  1022.                                 strcat(filename,lpath[i]);
  1023.                                 switch(_read_blk(wp, filename, &begcut, &endcut))
  1024.                                 {
  1025.                                     case -1:    /* kein ram frei */
  1026.                                         sprintf(alertstr,A7up[3],(char *)split_fname(filename));
  1027.                                         form_alert(1,alertstr); /* kein break, es geht weiter */
  1028.                                     case TRUE: /* ok */
  1029.                                         wp->w_state|=CHANGED;
  1030.                                         k=endcut->used; /* k nicht i */
  1031.                                         graf_mouse(M_OFF,0L);
  1032.                                         Wcursor(wp);
  1033.                                         if((wp->w_state&COLUMN))
  1034.                                             paste_col(wp,begcut,endcut);
  1035.                                         else
  1036.                                             paste_blk(wp,begcut,endcut);
  1037.                                         Wcursor(wp);
  1038.                                         graf_mouse(M_ON,0L);
  1039.                                         endcut->endcol=k;
  1040.                                         if(!(wp->w_state&COLUMN))
  1041.                                             hndl_blkfind(wp,begcut,endcut,SEAREND);
  1042.                                         else
  1043.                                             free_blk(wp,begcut); /* Spaltenblock freigeben */
  1044.                                         graf_mouse(M_OFF,0L);
  1045.                                         Wcursor(wp);
  1046.                                         Wredraw(wp,&wp->xwork);
  1047.                                         Wcursor(wp);
  1048.                                         graf_mouse(M_ON,0L);
  1049.                                         break;
  1050.                                     case FALSE:
  1051.                                         break;
  1052.                                 }
  1053.                                 begcut=endcut=NULL;
  1054.                             }
  1055.                         }
  1056.                         undo.item=FALSE;
  1057.                     }
  1058.                     else
  1059. #endif
  1060.                     {
  1061.                         switch(_read_blk(wp, filename, &begcut, &endcut))
  1062.                         {
  1063.                             case -1:    /* kein ram frei */
  1064.                                 sprintf(alertstr,A7up[3],split_fname(filename));
  1065.                                 form_alert(1,alertstr); /* kein break, es geht weiter */
  1066.                             case TRUE: /* ok */
  1067.                                 store_undo(wp, &undo, begcut, endcut, WINEDIT, EDITCUT);
  1068.                                 wp->w_state|=CHANGED;
  1069.                                 i=endcut->used;
  1070.                                 graf_mouse(M_OFF,0L);
  1071.                                 Wcursor(wp);
  1072.                                 if((wp->w_state&COLUMN))
  1073.                                     paste_col(wp,begcut,endcut);
  1074.                                 else
  1075.                                     paste_blk(wp,begcut,endcut);
  1076.                                 Wcursor(wp);
  1077.                                 graf_mouse(M_ON,0L);
  1078.                                 endcut->endcol=i;
  1079.                                 if(!(wp->w_state&COLUMN))
  1080.                                     hndl_blkfind(wp,begcut,endcut,SEAREND);
  1081.                                 else
  1082.                                     free_blk(wp,begcut); /* Spaltenblock freigeben */
  1083.                                 graf_mouse(M_OFF,0L);
  1084.                                 Wcursor(wp);
  1085.                                 Wredraw(wp,&wp->xwork);
  1086.                                 Wcursor(wp);
  1087.                                 graf_mouse(M_ON,0L);
  1088.                                 break;
  1089.                             case FALSE:
  1090.                                 sprintf(alertstr,A7up[4],(char *)split_fname(filename));
  1091.                                 form_alert(1,alertstr);
  1092.                                 undo.item=FALSE;    /* EDITCUT */
  1093.                                 break;
  1094.                         }
  1095.                         begcut=endcut=NULL;
  1096.                     }
  1097.                 }
  1098.                 break;
  1099.             case WININFO:
  1100.                 hndl_fileinfo(wp,blkwp);
  1101.                 break;
  1102.             case WINCLOSE:
  1103.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1104.                 {
  1105.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1106.                     {
  1107.                         if(desktop[desk_obj].ob_state & SELECTED)
  1108.                         {
  1109.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1110.                             delete(wp,desktop,desk_obj);
  1111.                         }
  1112.                     }
  1113.                 }
  1114.                 else
  1115.                 {
  1116.                     if(wp)
  1117.                     {
  1118.                         desk_obj=wp->icon;
  1119.                         delete(wp,desktop,desk_obj);
  1120.                     }
  1121.                 }
  1122.                 break;
  1123.             case WINSAVAS:
  1124.                 if(topwin && !cut && begcut && endcut) /* markierter Block */
  1125.                 {
  1126.                     write_block(wp,begcut,endcut);
  1127.                     break;                             /* hier muβ ein break hin !!! */
  1128.                 }
  1129.                 else                      /* ganze Datei */
  1130.                     newname=TRUE; /* kein break; */
  1131.             case WINSAVE:
  1132.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1133.                 {
  1134.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1135.                     {
  1136.                         if(desktop[desk_obj].ob_state & SELECTED)
  1137.                         {
  1138.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1139.                             if(!strcmp((char *)Wname(wp),NAMENLOS))
  1140.                                 write_file(wp,TRUE);
  1141.                             else
  1142.                             {
  1143.                                 write_file(wp,FALSE);
  1144.                                 strcpy(tempname,(char *)Wname(wp));
  1145.                                 unlink(change_ext(tempname,".$$$")); /* <NAME>.$$$ löschen */
  1146.                             }
  1147.                         }
  1148.                     }
  1149.                 }
  1150.                 else
  1151.                 {
  1152.                     if(!strcmp((char *)Wname(wp),NAMENLOS))
  1153.                         newname=TRUE;
  1154.                     write_file(wp,newname);
  1155.                     strcpy(tempname,(char *)Wname(wp));
  1156.                     unlink(change_ext(tempname,".$$$")); /* <NAME>.$$$ löschen */
  1157.                 }
  1158.                 timer=0L;         /* Autosave zurücksetzen */
  1159.                 newname=FALSE;
  1160.                 break;
  1161.             case WINABORT:
  1162.                 if(wp->w_state&CHANGED)
  1163.                 {
  1164.                     if(!cut)
  1165.                         hide_blk(wp,begcut,endcut);
  1166.                     strcpy(&alertstr[100],(char *)Wname(wp));  /* alerstr von delete gebraucht */
  1167.                     desk_obj=wp->icon;
  1168.                     if(delete(wp,desktop,desk_obj))
  1169.                         Wreadtempfile(&alertstr[100],TRUE); /* hier steht der alte Name drin */
  1170.                 }
  1171.                 break;
  1172.             case WINSHELL:
  1173. #if GEMDOS
  1174.                 hndl_shell(shellmenu,0);
  1175. #else
  1176.                 hndl_shell(shell2,0);
  1177. #endif
  1178.                 break;
  1179.             case WINLAY:
  1180.                 hndl_layout(layout,0);
  1181.                 break;
  1182.             case WINPRINT:
  1183.                 if(topwin && !cut && begcut && endcut)
  1184.                 {
  1185.                     print_block(wp,begcut,endcut);
  1186.                 }
  1187.                 else
  1188.                 {
  1189.                     if(is_selected(desktop,DESKICN1,DESKICN7))
  1190.                     {
  1191.                         for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1192.                         {
  1193.                             if(desktop[desk_obj].ob_state & SELECTED)
  1194.                             {
  1195.                                 wp=Wicon(desk_obj);                /* nimm Icon  */
  1196.                                 hndl_prtmenu(prtmenu,layout,pinstall,wp);
  1197.                             }
  1198.                         }
  1199.                     }
  1200.                     else
  1201.                         hndl_prtmenu(prtmenu,layout,pinstall,wp);
  1202.                 }
  1203.                 break;
  1204.             case WINQUIT:
  1205. /*
  1206.                 if(!Wcount(CHANGED) ||
  1207.                      (mevent.e_ks & (K_RSHIFT|K_LSHIFT)) ||
  1208.                     (divmenu[DIVSAVE].ob_state & SELECTED))
  1209.                 {
  1210.                     terminate_at_once=TRUE;
  1211.                     exit(exitcode); /* schon hier raus, sonst sind die Namen weg! */
  1212.                 }
  1213. */
  1214.                 if(!Wcount(CHANGED))
  1215.                 {
  1216.                     terminate_at_once=TRUE;
  1217.                     exit(exitcode);
  1218.                 }
  1219.                 abbruch=FALSE;
  1220.                 for(k=1; !abbruch && k<MAXWINDOWS; k++)
  1221.                 {
  1222.                     if(_wind[k].w_state & CREATED)
  1223.                     {
  1224.                         if(_wind[k].w_state & CHANGED)
  1225.                         {
  1226.                             sprintf(alertstr,A7up[1],split_fname((char *)Wname(&_wind[k])));
  1227.                             switch(form_alert(3,alertstr))
  1228.                             {
  1229.                                 case 1:
  1230.                                     _wind[k].w_state&=~CHANGED;
  1231.                                     break;
  1232.                                 case 2:
  1233.                                     abbruch=TRUE;
  1234.                                     break;
  1235.                                 case 3:
  1236.                                     write_file(&_wind[k], FALSE);
  1237.                                     strcpy(alertstr,(char *)Wname(&_wind[k]));
  1238.                                     unlink(change_ext(alertstr,".$$$")); /* <NAME>.$$$ löschen */
  1239.                                     break;
  1240.                             }
  1241.                         }
  1242.                         if(!Wcount(CHANGED) && !abbruch)
  1243.                           {
  1244.                             terminate_at_once=TRUE;
  1245.                             exit(exitcode);
  1246.                         }
  1247.                         if(!abbruch)
  1248.                         {
  1249.                             del_icon(desktop, _wind[k].icon);
  1250.                             Wfree(&_wind[k]);
  1251.                             Wdelete(&_wind[k]);
  1252.                             Menu_ienable(winmenu,WINNEW,TRUE);  /* Menueintrag wieder freigeben */
  1253.                             Menu_ienable(winmenu,WINOPEN,TRUE);
  1254.                         }
  1255.                     }
  1256.                 }
  1257.                 terminate_at_once=FALSE;
  1258.                 exitcode=0;                                  /* zurücksetzen */
  1259.                 break;
  1260.             case EDITUNDO:
  1261.                 do_undo(wp);
  1262.                 break;
  1263.             case EDITALL:
  1264.                 if(wp)
  1265.                 {
  1266.                     graf_mouse(M_OFF,0L);
  1267.                     Wcursor(wp);
  1268.                     mark_all(wp,&begcut,&endcut);
  1269.                     Wcuroff(wp);
  1270.                     Wcursor(wp);
  1271.                     graf_mouse(M_ON,0L);
  1272.                 }
  1273.                 else
  1274.                     sel_icons(desktop,DESKICN1,DESKICND,TRUE);
  1275.                 break;
  1276.             case EDITCUT:
  1277.                 if(wp && !cut && begcut && endcut)
  1278.                 {
  1279.                     graf_mouse(M_OFF,0L);
  1280.                     Wcursor(wp);
  1281.                     free_undoblk(wp, undo.blkbeg);
  1282.                     if((wp->w_state&COLUMN))
  1283.                     {
  1284.                         cut=cut_col(wp,begcut,endcut);
  1285.                         undo.flag=copy_col(wp,begcut,endcut,&undo.blkbeg,&undo.blkend);
  1286.                     }
  1287.                     else
  1288.                     {
  1289.                         cut=cut_blk(wp,begcut,endcut);
  1290.                         undo.flag=copy_blk(wp,begcut,endcut,&undo.blkbeg,&undo.blkend);
  1291.                     }
  1292.                     Wcuron(wp);
  1293.                     Wcursor(wp);
  1294.                     graf_mouse(M_ON,0L);
  1295.                     if(clipbrd)
  1296.                     {
  1297.                         write_clip(wp,begcut,endcut);
  1298.                         free_blk(wp,begcut);
  1299.                     }
  1300.                     undo.menu=WINEDIT;
  1301.                     undo.item=EDITPAST;
  1302.                 }
  1303.                 break;
  1304.             case EDITCOPY:
  1305.                 if(wp && !cut && begcut && endcut)
  1306.                 {
  1307.                     if(clipbrd)
  1308.                     {
  1309.                         write_clip(wp,begcut,endcut);
  1310.                     }
  1311.                     else
  1312.                     {
  1313.                         graf_mouse(M_OFF,0L);
  1314.                         Wcursor(wp);
  1315.                         if((wp->w_state&COLUMN))
  1316.                             cut=copy_col(wp,begcut,endcut,&begcopy,&endcopy);
  1317.                         else
  1318.                             cut=copy_blk(wp,begcut,endcut,&begcopy,&endcopy);
  1319.                         Wcuron(wp);
  1320.                         Wcursor(wp);
  1321.                         graf_mouse(M_ON,0L);
  1322.                         switch(cut)
  1323.                         {
  1324.                             case  TRUE:
  1325.                                 begcut=begcopy;
  1326.                                 endcut=endcopy;
  1327.                                 break;
  1328.                             case  FALSE:
  1329.                                 break;
  1330.                             case -1:
  1331.                                 free_blk(wp,begcopy);         /* Kopie freigeben     */
  1332.                                 form_alert(1,A7up[5]);
  1333.                                 break;
  1334.                         }
  1335.                     }
  1336.                 }
  1337.                 break;
  1338.             case EDITPAST:
  1339.                 if(wp && (clipbrd?1:(cut && begcut && endcut)))
  1340.                 {
  1341.                     if(clipbrd)
  1342.                     {
  1343.                         if(!cut && begcut && endcut)
  1344.                         {  /* wenn was markiert, erst weg damit */
  1345.                             overwrite=TRUE;
  1346.                             graf_mouse(M_OFF,0L);
  1347.                             Wcursor(wp);
  1348.                             free_undoblk(wp,undo.blkbeg); /* Block weg */
  1349.                             if((wp->w_state&COLUMN))
  1350.                             {
  1351.                                 cut=cut_col(wp,begcut,endcut);
  1352.                                 undo.flag=copy_col(wp,begcut,endcut,&undo.blkbeg,&undo.blkend);
  1353.                             }
  1354.                             else
  1355.                             {
  1356.                                 cut=cut_blk(wp,begcut,endcut);
  1357.                                 undo.flag=copy_blk(wp,begcut,endcut,&undo.blkbeg,&undo.blkend);
  1358.                             }
  1359.                             Wcuron(wp);
  1360.                             Wcursor(wp);
  1361.                             graf_mouse(M_ON,0L);
  1362.                             free_blk(wp,begcut);
  1363.                         }
  1364.                         else
  1365.                         {
  1366.                             if(begcut && endcut)          /* Block existiert */
  1367.                             {
  1368.                                           /* nach Klemmbretteinschaltung kann */
  1369.                                                 /* noch ein Ramblock existieren */
  1370.                                 free_blk(wp,begcut);          /* ...weg damit */
  1371.                             }
  1372.                             else                 /* ^B gedrückt, aber nicht ^E */
  1373.                             {                        /* also noch Müll aufräumen */
  1374.                                  cut=FALSE;
  1375.                                   begline=endline=NULL;
  1376.                                  begcut=endcut=NULL;
  1377.                             }
  1378.                         }
  1379.                         if(read_clip(wp,&begcut,&endcut))
  1380.                         {
  1381.                             store_undo(wp, &undo, begcut, endcut, WINEDIT, overwrite?CUTPAST:EDITCUT);
  1382.                             i=endcut->used;
  1383.                             graf_mouse(M_OFF,0L);
  1384.                             Wcursor(wp);
  1385.                             if((wp->w_state&COLUMN))
  1386.                                 paste_col(wp,begcut,endcut);
  1387.                             else
  1388.                                 paste_blk(wp,begcut,endcut);
  1389.                             Wcursor(wp);
  1390.                             graf_mouse(M_ON,0L);
  1391.                             endcut->endcol=i;
  1392.                             if(!(wp->w_state&COLUMN))
  1393.                                 hndl_blkfind(wp,begcut,endcut,SEAREND);
  1394.                             else
  1395.                                 free_blk(wp,begcut); /* Spaltenblock freigeben */
  1396.                         }
  1397.                         begcut=endcut=NULL;
  1398.                     }
  1399.                     else
  1400.                     {
  1401.                         graf_mouse(M_OFF,0L);
  1402.                         Wcursor(wp);
  1403.                         cut=copy_blk(wp,begcut,endcut,&begcopy,&endcopy);
  1404.                         switch(cut)
  1405.                         {
  1406.                             case  TRUE:
  1407.                                 store_undo(wp, &undo, begcopy, endcopy, WINEDIT, EDITCUT);
  1408.                                 i=endcopy->used;
  1409.                                 if((wp->w_state&COLUMN))
  1410.                                     paste_col(wp,begcopy,endcopy);
  1411.                                 else
  1412.                                     paste_blk(wp,begcopy,endcopy);
  1413.                                 endcopy->endcol=i;
  1414.                                 break;
  1415.                             case  FALSE:
  1416.                                 break;
  1417.                             case -1:
  1418.                                 free_blk(wp,begcopy);         /* Kopie freigeben     */
  1419.                                 form_alert(1,A7up[5]);
  1420.                                 cut=FALSE;
  1421.                                 undo.item=FALSE;    /* EDITCUT */
  1422.                                 break;
  1423.                         }
  1424.                         Wcursor(wp);
  1425.                         graf_mouse(M_ON,0L);
  1426.                         if(!(wp->w_state&COLUMN))
  1427.                         {
  1428.                             if(cut)
  1429.                                 hndl_blkfind(wp,begcopy,endcopy,SEAREND);
  1430.                         }
  1431.                     }
  1432.                 }
  1433.                 break;
  1434.             case EDITSHLF:
  1435.                 shlf_line(wp,begcut,endcut);
  1436.                 break;
  1437.             case EDITSHRT:
  1438.                 shrt_line(wp,begcut,endcut);
  1439.                 break;
  1440.             case EDITFORM:
  1441.                 if(!cut)
  1442.                 {
  1443. /*
  1444.                     textformat(wp,&begcut,&endcut);
  1445. */
  1446.                     hndl_textformat(wp,formatmenu,&begcut,&endcut);
  1447.                 }
  1448.                 break;
  1449.             case EDITSORT:
  1450.                 hndl_sort(wp,sortmenu,&begcut,&endcut);
  1451.                 break;
  1452.  
  1453.             case EDITTOGL:
  1454.             case EDITBIG:
  1455.             case EDITSMAL:
  1456.             case EDITCAPS:
  1457.                 if(!cut)
  1458.                     changeletters(wp,begcut,endcut,item);
  1459.                 break;
  1460. /*
  1461.             case EDITTOGL:
  1462.                 if(!cut)
  1463.                     changeletters(wp,begcut,endcut,item);
  1464.                 break;
  1465.             case EDITBIG:
  1466.             case EDITSMAL:
  1467.             case EDITCAPS:
  1468.                 if(!cut)
  1469.                     textformat2(wp, begcut, endcut, item);
  1470.                 break;
  1471. */
  1472. /*
  1473.             case EDITCLIP:
  1474.                 Menu_icheck(winmenu,EDITCLIP,clipbrd^=TRUE);
  1475.                 break;
  1476. */
  1477.             case SEARNEXT:
  1478.             case SEARFIND:
  1479.             case SEARSEL :
  1480.                 hndl_find(wp,&begcut,&endcut,item);
  1481.                 break;
  1482.             case SEARFILE:
  1483.                 hndl_grepmenu(grepmenu,0);
  1484.                 break;
  1485.             case SEARBEG:
  1486.             case SEAREND:
  1487.                 k=endcut->endcol; /* ans ende also 512 gesprungen      */
  1488.                 endcut->endcol=min(endcut->used,endcut->endcol);
  1489.                 hndl_blkfind(wp,begcut,endcut,item);
  1490.                 endcut->endcol=k;
  1491.                 break;
  1492.             case SEARSMRK:
  1493.             case SEARGMRK:
  1494.                 textmarker(wp,markmenu,item,0,0);
  1495.                 break;
  1496.             case SEARGOTO:
  1497.                 hndl_goto(wp,gotomenu,-1);
  1498.                 break;
  1499.             case SEARPAGE:
  1500.                 hndl_page(wp,gotomenu,-1);
  1501.                 break;
  1502.             case BLKCNT:
  1503.             case BLKSUM:
  1504.             case BLKMEAN:
  1505.             case BLKSDEV:
  1506.             case BLKMWST:
  1507.             case BLKINTER:
  1508.             case BLKALL:
  1509.                 if(!cut)
  1510.                     rechnen(wp,nummenu,item,begcut,endcut);
  1511.                 break;
  1512.             case BLKKONF:
  1513.                 hndl_nummenu(nummenu,0,0);
  1514.                 break;
  1515.             case FORMTAB:
  1516.                 i=hndl_tab(tabmenu,wp);
  1517.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1518.                 {
  1519.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1520.                     {
  1521.                         if(desktop[desk_obj].ob_state & SELECTED)
  1522.                         {
  1523.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1524.                             wp->tab=i;
  1525.                         }
  1526.                     }
  1527.                 }
  1528.                 else
  1529.                     wp->tab=i;
  1530.                 break;
  1531.             case FORMUMBR:
  1532.                 i=hndl_umbruch(umbrmenu,wp,0);
  1533.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1534.                 {
  1535.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1536.                     {
  1537.                         if(desktop[desk_obj].ob_state & SELECTED)
  1538.                         {
  1539.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1540.                             wp->umbruch=i;
  1541.                         }
  1542.                     }
  1543.                 }
  1544.                 else
  1545.                     wp->umbruch=i;
  1546.                 break;
  1547.             case FORMBLK:
  1548.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1549.                 {
  1550.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1551.                     {
  1552.                         if(desktop[desk_obj].ob_state & SELECTED)
  1553.                         {
  1554.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1555.                             Menu_icheck(winmenu,FORMBLK,(wp->w_state^=BLOCKSATZ)&BLOCKSATZ?TRUE:FALSE);
  1556.                         }
  1557.                     }
  1558.                 }
  1559.                 else
  1560.                     Menu_icheck(winmenu,FORMBLK,(wp->w_state^=BLOCKSATZ)&BLOCKSATZ?TRUE:FALSE);
  1561.                 break;
  1562.             case BLKCOL:
  1563.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1564.                 {
  1565.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1566.                     {
  1567.                         if(desktop[desk_obj].ob_state & SELECTED)
  1568.                         {
  1569.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1570.                             Menu_icheck(winmenu,BLKCOL,(wp->w_state^=COLUMN)&COLUMN?TRUE:FALSE);
  1571.                         }
  1572.                     }
  1573.                 }
  1574.                 else
  1575.                     Menu_icheck(winmenu,BLKCOL,(wp->w_state^=COLUMN)&COLUMN?TRUE:FALSE);
  1576.                 break;
  1577.             case FORMINS:
  1578.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1579.                 {
  1580.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1581.                     {
  1582.                         if(desktop[desk_obj].ob_state & SELECTED)
  1583.                         {
  1584.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1585.                             Menu_icheck(winmenu,FORMINS,(wp->w_state^=INSERT)&INSERT?TRUE:FALSE);
  1586.                         }
  1587.                     }
  1588.                 }
  1589.                 else
  1590.                 {
  1591.                     graf_mouse(M_OFF,NULL);
  1592.                     Wcursor(wp);
  1593.                     Menu_icheck(winmenu,FORMINS,(wp->w_state^=INSERT)&INSERT?TRUE:FALSE);
  1594.                     Wcuron(wp);
  1595.                     Wcursor(wp);
  1596.                     graf_mouse(M_ON,NULL);
  1597.                 }
  1598.                 break;
  1599.             case FORMIND:
  1600.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1601.                 {
  1602.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1603.                     {
  1604.                         if(desktop[desk_obj].ob_state & SELECTED)
  1605.                         {
  1606.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1607.                             Menu_icheck(winmenu,FORMIND,(wp->w_state^=INDENT)&INDENT?TRUE:FALSE);
  1608.                         }
  1609.                     }
  1610.                 }
  1611.                 else
  1612.                     Menu_icheck(winmenu,FORMIND,(wp->w_state^=INDENT)&INDENT?TRUE:FALSE);
  1613.                 break;
  1614.             case MACOPEN:
  1615.                 loadmacro();
  1616.                 break;
  1617.             case MACSAVE:
  1618.                 savemacro();
  1619.                 break;
  1620.             case MACREC:
  1621.             case MACSTOP:
  1622.             case MACPLAY:
  1623.                 record_macro(item,0,0);
  1624.                 break;
  1625.             case MACSCT:
  1626.                 hndl_shortcuts();
  1627.                 break;
  1628.             case WINNEXT2:
  1629.                 Wcycle(wp);
  1630.                 break;
  1631.             case WINOPALL:
  1632.                 Wopenall();
  1633.                 break;
  1634.             case WINCLALL:
  1635.                 Wcloseall();
  1636.                 break;
  1637.             case WINARR1:
  1638.             case WINARR2:
  1639.             case WINARR3:
  1640.                  graf_mouse(M_OFF,NULL);
  1641.                  Wcursor(wp);
  1642.                 Warrange(item-WINARR1+1);
  1643.                  Wcursor(wp);
  1644.                  graf_mouse(M_ON,NULL);
  1645.                 break;
  1646.             case WINFULL:
  1647.                  graf_mouse(M_OFF,NULL);
  1648.                  Wcursor(wp);
  1649.                 Wfull(wp);
  1650.                  Wcursor(wp);
  1651.                  graf_mouse(M_ON,NULL);
  1652.                 break;
  1653.             case WINDAT1:
  1654.             case WINDAT2:
  1655.             case WINDAT3:
  1656.             case WINDAT4:
  1657.             case WINDAT5:
  1658.             case WINDAT6:
  1659.             case WINDAT7:
  1660.                 Wopen(Wmentry(item));
  1661.                 break;
  1662. #if GEMDOS
  1663.             case OPTHELP:
  1664.                 if(wp && (mevent.e_ks & (K_LSHIFT|K_RSHIFT)))
  1665.                 {
  1666.                     if(*errorstr=='\"' && errorstr[strlen(errorstr)-1]=='\"')
  1667.                     {
  1668.                         if(wp->kind & INFO)
  1669.                             wind_set(wp->wihandle,WF_INFO,errorstr);
  1670.                         else
  1671.                             form_alert(1,A7up[6]);
  1672.                     }
  1673.                     else
  1674.                     {
  1675.                         form_alert(1,A7up[7]);
  1676.                     }
  1677.                 }
  1678.                 else
  1679.                     if(!help())
  1680.                     {
  1681.                         sprintf(alertstr,A7up[8],(char *)(divmenu[DIVHDA].ob_spec.index/*+16L*/));
  1682.                         form_alert(1,alertstr);
  1683.                     }
  1684.                 break;
  1685. #endif
  1686.             case OPTFONT:
  1687.                 hndl_font(wp,fontmenu);
  1688.                 av_font=wp?wp->fontid:av_font;
  1689.                 av_point=wp?wp->fontsize:av_point;
  1690.                 break;
  1691.             case OPTCHARS:
  1692.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1693.                 {
  1694.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1695.                     {
  1696.                         if(desktop[desk_obj].ob_state & SELECTED)
  1697.                         {
  1698.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1699.                             hndl_chartable(wp,chartable);
  1700.                         }
  1701.                     }
  1702.                 }
  1703.                 else
  1704.                     hndl_chartable(wp,chartable);
  1705.                 break;
  1706.             case OPTFKT:
  1707.                 hndl_fkeymenu(fkeymenu,0);
  1708.                 break;
  1709.             case OPTVIEW:
  1710.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1711.                 {
  1712.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1713.                     {
  1714.                         if(desktop[desk_obj].ob_state & SELECTED)
  1715.                         {
  1716.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1717.                             hndl_preview(wp,preview, begcut, endcut);
  1718.                         }
  1719.                     }
  1720.                 }
  1721.                 else
  1722.                     hndl_preview(wp,preview, begcut, endcut);
  1723.                 break;
  1724.             case OPTLIN:
  1725.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1726.                 {
  1727.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1728.                     {
  1729.                         if(desktop[desk_obj].ob_state & SELECTED)
  1730.                         {
  1731.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1732.                             hndl_lineal(wp,0);
  1733.                         }
  1734.                     }
  1735.                 }
  1736.                 else
  1737.                     hndl_lineal(wp,0);
  1738.                 break;
  1739.             case OPTBRACE:
  1740.                 if(is_selected(desktop,DESKICN1,DESKICN7))
  1741.                 {
  1742.                     for(desk_obj=DESKICN1; desk_obj<=DESKICN7; desk_obj++)
  1743.                     {
  1744.                         if(desktop[desk_obj].ob_state & SELECTED)
  1745.                         {
  1746.                             wp=Wicon(desk_obj);                /* nimm Icon  */
  1747.                             check_braces(bracemenu,wp,NULL,NULL);
  1748.                         }
  1749.                     }
  1750.                 }
  1751.                 else
  1752.                     check_braces(bracemenu,wp,begcut,endcut);
  1753.                 break;
  1754.             case OPTCOMP:
  1755.                 textcompare();
  1756.                 break;
  1757.             case OPTDIV:
  1758.                 hndl_diverses(divmenu,0);
  1759.                 break;
  1760.             case OPTSAVE:    /* Einstellungen sichern */
  1761. /*
  1762.                 if(form_alert(2,A7up[9])==2)
  1763. */
  1764.                 {
  1765.                     sicons();
  1766.                     saveconfig(FALSE);
  1767.                 }
  1768.                 break;
  1769.             default:
  1770.                 break;
  1771.         }
  1772.         /* Reihenfolge nicht ändern! */
  1773.         toolbar_tnormal(wp,wp?wp->toolbar:NULL, item, 1);
  1774.         wp=Wgettop();
  1775.         checkmenu(winmenu,wp);    /* je nach Aktion, Menu (de)aktivieren */
  1776.                                         /* hier muβ es Wgettop() statt wp heiβen, */
  1777.                                         /* weil vielleicht ein Fenster geschlossen wurde */
  1778.           menu_tnormal(winmenu,menu,1);
  1779. }
  1780.  
  1781. void _hndl_keybd(WINDOW *wp, int kstate, int key)
  1782. {
  1783.     int menu, item;
  1784.  
  1785.     MapKey(&kstate,&key); /* Profibuch Seite 761 */
  1786.  
  1787.     if(!Whndlkbd(wp,kstate,key))
  1788.     {
  1789.         switch(menu_ikey(winmenu,kstate,key,&menu,&item))
  1790.         {
  1791.             case -1:
  1792.                 /* MT 16.4.95 disableter Menüpunkt. Nichts machen */
  1793.                 break;
  1794.             case  0:
  1795.                 if(wp /*&& ! (wp->w_state & ICONIFIED)*/)
  1796.                 {
  1797.                     if(!fkeys(wp,kstate,key,&begcut,&endcut))
  1798.                     {
  1799.                         altnum(&kstate,&key);
  1800.                         if(!special(wp,&blkwp,kstate,key,&begcut,&endcut)) /* versteckte Shortcuts */
  1801.                             editor(wp,kstate,key,&begcut,&endcut);
  1802.                     }
  1803.                 }
  1804.                 break;
  1805.             default:
  1806.                 hndl_menu( menu, item); /* nur bei geändertem menu_ikey() */
  1807.                 break;
  1808.         }
  1809. /*
  1810.         if(!menu_ikey(winmenu,kstate,key,&menu,&item))
  1811.         {
  1812.             if(wp /*&& ! (wp->w_state & ICONIFIED)*/)
  1813.             {
  1814.                 if(!fkeys(wp,kstate,key,&begcut,&endcut))
  1815.                 {
  1816.                     altnum(&kstate,&key);
  1817.                     if(!special(wp,&blkwp,kstate,key,&begcut,&endcut)) /* versteckte Shortcuts */
  1818.                         editor(wp,kstate,key,&begcut,&endcut);
  1819.                 }
  1820.             }
  1821.         }
  1822.         else
  1823.             hndl_menu( menu, item); /* nur bei geändertem menu_ikey() */
  1824. */
  1825.     }
  1826.     else
  1827.     {
  1828.       if(!_WKeyBlock(wp, &begcut, &endcut, kstate, key))
  1829.             if(!cut)
  1830.                 hide_blk(wp,begcut,endcut);
  1831.     }
  1832. }
  1833.  
  1834. /* läuft nicht bei Blockoperationen gecancelt 10.7.94
  1835. WINDOW *Wgetwind(register int wum)
  1836. {
  1837.     WINDOW *wp=NULL;
  1838.     
  1839.     if(wum) /* window_under_mouse */
  1840.         wp=Wp(wind_find(mevent.e_mx, mevent.e_my));
  1841.     return(wp?wp:Wgettop());
  1842. }
  1843. */
  1844.  
  1845. void hndl_keybd(int kstate, int key)
  1846. {
  1847.     WINDOW *wp;
  1848.     register int tkey, event=0, repeat_off = FALSE;
  1849. /*
  1850.     wp=Wgetwind(window_under_mouse);
  1851. */
  1852.     wp=Wgettop();
  1853.     
  1854.     tkey=key>>8;      /* Tempkey */
  1855.     if(
  1856.         tkey==0x4B || /* lf          */
  1857.         tkey==0x4D || /* rt          */
  1858.         tkey==0x48 || /* up          */
  1859.         tkey==0x50 || /* dn          */
  1860.         tkey==0x0E || /* BS          */
  1861.         tkey==0x53 || /* Del         */
  1862.         tkey==0x1C || /* Return  */
  1863.         tkey==0x72)    /* Enter    */
  1864.     {
  1865.         Supexec(_keyoff);
  1866.         repeat_off=TRUE;
  1867.     }
  1868.     mevent.e_time=2*E_TIME; /* Verlängern, weil jetzt Tasten gedrückt werden */
  1869.  
  1870.     _hndl_keybd(wp,kstate,key);
  1871.  
  1872.     if(repeat_off)
  1873.         Supexec(_keyon);
  1874. }
  1875.  
  1876. int mouse_is_in_icon(OBJECT *tree, int icon, int mx, int my)
  1877. {
  1878.     ICONBLK *iconblk;
  1879.     int xoff, yoff;
  1880.     iconblk=tree[icon].ob_spec.iconblk;
  1881.     objc_offset(tree,icon,&xoff,&yoff);
  1882.     if((mx > xoff+iconblk->ib_xicon && mx < xoff+iconblk->ib_xicon + iconblk->ib_wicon - 1 &&
  1883.          my > yoff+iconblk->ib_yicon && my < yoff+iconblk->ib_yicon + iconblk->ib_hicon + 5 - 1 )
  1884.         ||
  1885.         (mx > xoff+iconblk->ib_xtext && mx < xoff+iconblk->ib_xtext + iconblk->ib_wtext - 1 &&
  1886.          my > yoff+iconblk->ib_ytext && my < yoff+iconblk->ib_ytext + iconblk->ib_htext - 1 ) )
  1887.         return(TRUE);
  1888.     else
  1889.         return(FALSE);
  1890. }
  1891.  
  1892. void hndl_icons(OBJECT *tree, int mx, int my, int key, int click)
  1893. {
  1894.     int desk_obj,ret,mc;
  1895.  
  1896.     if(nodesktop)
  1897.         return;
  1898.  
  1899.     desk_obj=objc_find(tree,ROOT,MAX_DEPTH,mx,my);
  1900.     if((desk_obj>=DESKICN1 && desk_obj<=DESKICND) && mouse_is_in_icon(tree,desk_obj,mx,my))
  1901.     {
  1902.         if(key & (K_RSHIFT|K_LSHIFT))
  1903.         {
  1904.             if(tree[desk_obj].ob_state & SELECTED)
  1905.             {
  1906.                 desel_icons(tree,desk_obj,desk_obj,TRUE);
  1907.                 wind_update(BEG_MCTRL);
  1908.                 do /* warten, bis mausknopf losgelassen */
  1909.                 {
  1910.                     graf_mkstate(&ret,&ret,&mc,&ret);
  1911.                 }
  1912.                 while(mc);
  1913.                 wind_update(END_MCTRL);
  1914.             }
  1915.             else
  1916.             {
  1917.                 sel_icons(tree,desk_obj,desk_obj,TRUE);
  1918.                 wind_update(BEG_MCTRL);
  1919.                 drag_icon(tree,desk_obj);
  1920.                 wind_update(END_MCTRL);
  1921.             }
  1922.         }
  1923.         else
  1924.         {
  1925.             if(click==SINGLECLICK)
  1926.             {
  1927.                 wind_update(BEG_MCTRL);
  1928.                 drag_icon(tree,desk_obj);
  1929.                 wind_update(END_MCTRL);
  1930.             }
  1931.             else
  1932.             {
  1933.                 desel_icons(tree,DESKICN1,DESKICND,TRUE);
  1934.                 click_icon(tree,desk_obj);
  1935.             }
  1936.         }
  1937.     }
  1938.     else
  1939.     {
  1940.         desel_icons(tree,DESKICN1,DESKICND,TRUE);
  1941.         mark_icons(tree,mx,my);
  1942.     }
  1943. }
  1944.  
  1945.  
  1946. void hndl_button(void)
  1947. {
  1948.     WINDOW *wp;
  1949.     LINESTRUCT *line;
  1950.     int x,y,len;
  1951.     char *cp1, *cp2;
  1952.  
  1953.     wp=Wp(wind_find(mevent.e_mx,mevent.e_my));
  1954.    
  1955.    if(wp && toolbar_do(wp,wp->toolbar,mevent.e_mx,mevent.e_my,mevent.e_br,mevent.e_ks)>0) /* Toolbar geklickt. Gleich raus */
  1956.       return;
  1957.  
  1958.     if(!winx && mevent.e_mb==3 && mevent.e_br==1) /* Browsing einleiten */
  1959.     {
  1960.         if(wp)
  1961.         {
  1962.             if(isvertical(wp,mevent.e_mx,mevent.e_my))
  1963.             {
  1964.                 Wrealscroll(wp, mevent.e_mx, mevent.e_my, VERTICAL);
  1965.                 return;
  1966.             }
  1967.             if(ishorizontal(wp,mevent.e_mx,mevent.e_my))
  1968.             {
  1969.                 Wrealscroll(wp, mevent.e_mx, mevent.e_my, HORIZONTAL);
  1970.                 return;
  1971.             }
  1972.         }
  1973.     }
  1974.     if(mevent.e_br) /* alle Klicks durchlassen */
  1975.     {
  1976.         if(wp)
  1977.         {
  1978.             if(!_Wmarkblock(wp,&begcut,&endcut,mevent.e_mx,mevent.e_my,mevent.e_br,mevent.e_ks))
  1979.             {
  1980.                 if(mevent.e_br==SINGLECLICK)
  1981.                 {
  1982.                     if(!cut)
  1983.                         hide_blk(wp,begcut,endcut);
  1984.                     if(mevent.e_ks & (K_RSHIFT|K_LSHIFT)) /* Blockmarkierung mit Shifttaste */
  1985.                     {
  1986.                         begcut=beg_blk(wp,begcut,endcut);
  1987.                         endcut=NULL;
  1988.                         cut=FALSE;
  1989.                         blkwp=wp;                             /* diesem Fenster gehört der Block */
  1990.                     }
  1991.                     if(Wmxycursor(wp,mevent.e_mx,mevent.e_my))
  1992.                         undo.item=FALSE;
  1993.                     if(mevent.e_ks & (K_RSHIFT|K_LSHIFT)) /* Blockmarkierung mit Shifttaste */
  1994.                     {
  1995.                         graf_mouse(M_OFF,0L);
  1996.                         Wcursor(wp);
  1997.                         endcut=end_blk(wp,&begcut,&endcut);
  1998.                         Wcuroff(wp);
  1999.                         Wcursor(wp);
  2000.                         graf_mouse(M_ON,0L);
  2001.                         if(endcut==NULL ||                          /* Fehler? oder     */
  2002.                           (begcut->begcol == begcut->endcol)) /* gleiche Stelle? */
  2003.                         {
  2004.                             hide_blk(wp,begcut,endcut);
  2005.                             blkwp=NULL;
  2006.                             goto WEITER;                      /* Bei Fehler überspringen */
  2007.                         }
  2008.                     }
  2009.                     if(mevent.e_ks & K_CTRL)  /* Blockmarkierung mit Controltaste */
  2010.                     {
  2011.                         if(cut)                    /* gibt es erst noch müll zu löschen */
  2012.                             free_blk(wp,begcut);
  2013.                             /* erst Blockende dann Blockanfang, sonst geht es nicht */
  2014.                         if(wp==blkwp && begcut && !endcut)  /* Reihenfolge NICHT vertauschen */
  2015.                         {
  2016.                             graf_mouse(M_OFF,0L);
  2017.                             Wcursor(wp);
  2018.                             endcut=end_blk(wp,&begcut,&endcut);
  2019.                             Wcuroff(wp);
  2020.                             Wcursor(wp);
  2021.                             graf_mouse(M_ON,0L);
  2022.                             if(endcut==NULL ||                          /* Fehler? oder     */
  2023.                               (begcut->begcol == begcut->endcol)) /* gleiche Stelle? */
  2024.                             {
  2025.                                 hide_blk(wp,begcut,endcut);
  2026.                                 blkwp=NULL;
  2027.                                 goto WEITER;                  /* Bei Fehler überspringen */
  2028.                             }
  2029.                         }
  2030.                         if(!begcut && !endcut)
  2031.                         {
  2032.                             begcut=beg_blk(wp,begcut,endcut);
  2033.                             endcut=NULL;
  2034.                             cut=FALSE;
  2035.                             blkwp=wp;                             /* diesem Fenster gehört der Block */
  2036.                         }
  2037. WEITER:              ; /* <- hier muβ für PC-TC 2.0 ein Leerstatement sein, grrr.. */
  2038.                     }
  2039.                 }
  2040.             }
  2041.             else
  2042.             {
  2043.                 blkwp=wp;                                     /* diesem Fenster gehört der Block */
  2044.                 cut=FALSE;
  2045.                 mevent.e_br=0;
  2046.             }
  2047.         }
  2048.         else
  2049.             hndl_icons(desktop,mevent.e_mx,mevent.e_my,mevent.e_ks,SINGLECLICK);
  2050.     }
  2051.     if(mevent.e_br == TRIPLECLICK)
  2052.     {
  2053.         if(wp)
  2054.         {
  2055.             if(Wdclickline(wp,&begcut,&endcut,mevent.e_mx,mevent.e_my))/* Zeile */
  2056.             {
  2057.                 blkwp=wp;                    /* diesem Fenster gehört der Block */
  2058.                 cut=FALSE;
  2059.             }
  2060.             else
  2061. #if GEMDOS
  2062.                 Bconout(2,7);
  2063. #else
  2064.                 v_sound(aeshandle, 440, 2);
  2065. #endif
  2066.         }
  2067.     }
  2068.     if(mevent.e_br == DOUBLECLICK)
  2069.     {
  2070.         if(wp)
  2071.         {
  2072.             if(mevent.e_ks & (K_RSHIFT|K_LSHIFT))
  2073.             {
  2074.                 if(Wdclickline(wp,&begcut,&endcut,mevent.e_mx,mevent.e_my))/* Zeile */
  2075.                 {
  2076.                     blkwp=wp;                    /* diesem Fenster gehört der Block */
  2077.                     cut=FALSE;
  2078.                 }
  2079.                 else
  2080. #if GEMDOS
  2081.                     Bconout(2,7);
  2082. #else
  2083.                     v_sound(aeshandle, 440, 2);
  2084. #endif
  2085.             }
  2086.             else
  2087.             {
  2088.                 if(Wdclickword(wp,&begcut,&endcut,mevent.e_mx,mevent.e_my))
  2089.                 {
  2090.                     blkwp=wp;                  /* diesem Fenster gehört der Block */
  2091.                     cut=FALSE;
  2092.                     if(iserrfile(wp) && isnumeric(searchstring) && Wcount(OPENED)==2) /* Errorfile ?      */
  2093.                     {  /* Errorlisting in <name>.ERR, zweite Datei beliebig */
  2094.                         /* in searchstr ist angeklickte Zeilenzahl */
  2095.                         strcpy(alertstr,searchstring);    /* retten, weil durch */
  2096.                                                                     /* hide_blk() gelösch */
  2097.                         line=begcut;
  2098.                         if(!cut)
  2099.                             hide_blk(wp,begcut,endcut);
  2100.                         else
  2101.                             free_blk(wp,begcut);
  2102.                         Wcycle(wp);                                 /* Fensterwechsel      */
  2103.                         if(wp=Wgettop())             /* im zweiten Fenster zur Zeile */
  2104.                         {
  2105.                             if(!cut)
  2106.                                 hide_blk(wp,begcut,endcut);
  2107.                             strcpy(searchstring,alertstr);    /* wieder umkopieren  */
  2108.                             hndl_goto(wp,NULL,atol(searchstring)); /* Zeilennummer angeklickt ? */
  2109.                             if(wp->kind & INFO)
  2110.                             {
  2111.                                 strcpy(errorstr,"\"");/* errorstring zusammenbasteln */
  2112.                                 strcat(errorstr,line->string);
  2113.                                 strcat(errorstr,"\"");
  2114.                                 graf_mouse(M_OFF,NULL);
  2115.                                 Wcursor(wp);            /* Cursor korrekt positionieren */
  2116.                                 Wsetrcinfo(wp); /* Infozeile setzen, um Timer zu beruhigen */
  2117.                                 Wcursor(wp);
  2118.                                 graf_mouse(M_ON,NULL);
  2119.                                 wind_set(wp->wihandle,WF_INFO,errorstr); /* einblenden */
  2120.                             }
  2121.                         }
  2122.                         *searchstring=0;                      /* löschen                */
  2123.                     }
  2124.                     if(isregfile(wp) && isdigit(begcut->string[0])) /* Regular Expression file ? */
  2125.                     {
  2126.                         line=wp->fstr;
  2127.                         while(strncmp(line->string,"Gesucht: \"",10))
  2128.                         {                                        /* wo ist das Suchmuster? */
  2129.                             line=line->next;
  2130.                         }
  2131.                         strcpy(alertstr,&line->string[10]); /* Suchmuster kopieren */
  2132.                         alertstr[strlen(alertstr)-1]=0;      /* letztes " killen  */
  2133.                         prepare(findmenu,grepmenu,alertstr);            /* Weitersuchen ^G    */
  2134.                         sscanf(begcut->string,"%d %d %d:",&y,&x,&len);
  2135.                         line=begcut;
  2136.                         do
  2137.                         {
  2138.                             line=line->prev;
  2139.                         }
  2140.                         while(strncmp(line->string,"Datei",5) && line->string[7]!=':');
  2141.                         strcpy(alertstr,&line->string[6]);
  2142.                         if(!cut)
  2143.                             hide_blk(wp,begcut,endcut);
  2144.                         else
  2145.                             free_blk(wp,begcut);
  2146.                         wp=Wreadtempfile(alertstr,FALSE); /* Datei laden */
  2147.                         if(wp) /* testen, ob gültig */
  2148.                         {
  2149.                             if(!cut)
  2150.                                 hide_blk(wp,begcut,endcut);
  2151.                             sprintf(searchstring,"%d",y);
  2152.                             hndl_goto(wp,NULL,atol(searchstring)); /* Zeilennummer angeklickt ? */
  2153.                             graf_mouse(M_OFF,0L); /* Cursor positionieren */
  2154.                             Wcursor(wp);
  2155.                             wp->cspos=wp->col=(x-1)-wp->wfirst/wp->wscroll;
  2156.                             wp->cspos=Wshiftpage(wp,0,wp->cstr->used);
  2157.                             lastwstr=wp->wstr;
  2158.                             lasthfirst=wp->hfirst;
  2159.                             begline=(y-1)+wp->hfirst/wp->hscroll;
  2160.                             endline=begline;
  2161.                             begcut=endcut=wp->cstr;
  2162.                             begcut->begcol=endcut->begcol=x-1;
  2163.                             begcut->endcol=endcut->endcol=x-1+len;
  2164.                             begcut->attr=(endcut->attr|=SELECTED);
  2165.                             mark_line(wp,begcut,y-1);
  2166.                             Wcuroff(wp);
  2167.                             Wcursor(wp);
  2168.                             graf_mouse(M_ON,0L);
  2169.                             strncpy(searchstring,&begcut->string[x-1],len);
  2170.                             searchstring[len]=0;
  2171.                             blkwp=wp;
  2172.                         }
  2173.                     }
  2174.                     if(x=isfreepattern(bracemenu,searchstring))
  2175.                     {
  2176.                         form_read(bracemenu,x,iostring);
  2177.                         form_read(bracemenu,x+1,&iostring[20]);
  2178.                         if(Wirth2(wp,&begcut,&endcut,iostring,&iostring[20]))
  2179.                         {
  2180.                             x=endcut->endcol; /* ans ende also 512 gesprungen      */
  2181.                             endcut->endcol=min(endcut->used,endcut->endcol);
  2182.                             hndl_blkfind(wp,begcut,endcut,SEAREND);
  2183.                             endcut->endcol=x;
  2184.                         }
  2185.                     }
  2186.                 }
  2187.                 else
  2188.                 {
  2189.                     if(Wdclickbrace(wp,&begcut,&endcut,mevent.e_mx,mevent.e_my))
  2190.                     {
  2191.                         blkwp=wp;          /* diesem Fenster gehört der Block */
  2192.                         cut=FALSE;
  2193.                     }
  2194.                     else
  2195. #if GEMDOS
  2196.                         Bconout(2,7);
  2197. #else
  2198.                         v_sound(aeshandle, 440, 2);
  2199. #endif
  2200.                 }
  2201.             }
  2202.         }
  2203.         else
  2204.         {
  2205.             hndl_icons(desktop,mevent.e_mx,mevent.e_my,mevent.e_ks,DOUBLECLICK);
  2206.         }
  2207.     }
  2208.     checkmenu(winmenu,Wgettop()); /* je nach Aktion, Menu (de)aktivieren */
  2209. }
  2210.  
  2211. void hndl_timer(void)
  2212. {
  2213.     WINDOW *wp;
  2214.  
  2215.     wp=Wgettop();
  2216. /*
  2217.     wp=Wgetwind(window_under_mouse);
  2218. */
  2219.     timer++;
  2220.     mevent.e_time=E_TIME; /* wieder kürzer blinkend */
  2221.     
  2222.     _Wcblink(wp, mevent.e_mx, mevent.e_my);
  2223.     if(!(timer % 2))                      /* jede 1s */
  2224.     {
  2225.         Wslupdate(wp,1+2+4+8);
  2226.         Wsetrcinfo(wp);
  2227.         checkmenu(winmenu,wp);
  2228.         if(undo.item==FALSE)
  2229.             free_undoblk(wp,undo.blkbeg); /* freigeben, wenn nicht gebraucht */
  2230.         Wtabbarupdate(wp);
  2231.     }
  2232.     if(!(timer % 20)) /* alle 10s */
  2233.     {
  2234.         graf_mouse(M_ON,NULL); /* Maus zwangsweise wieder einschalten */
  2235.     }
  2236.     if(!(timer %  240))    /* alle 2min Registrierungscode auswerten */
  2237.     {
  2238.         reg_code();
  2239.     }
  2240.     if(wp && (wp->w_state & CHANGED) && !(timer % (backuptime/(481L)))) /* autom. Backupzeit */
  2241.     {
  2242.         if(!begcut && !endcut) /* kein Block, ganze Datei */
  2243.         {
  2244.             if(!strcmp((char *)Wname(wp),NAMENLOS))
  2245.                 write_file(wp,TRUE);
  2246.             else
  2247.             {
  2248.                 strcpy(alertstr,(char *)Wname(wp));
  2249.                 _write_file(wp,change_ext(alertstr,".$$$"), "wb", FALSE, FALSE, SIGNULL);
  2250.                 wp->w_state|=CHANGED; /* wieder setzen */
  2251.             }
  2252.         }
  2253.     }
  2254. }
  2255.  
  2256. char *isinffile(int argc, char *argv[]);
  2257.  
  2258. #if GEMDOS
  2259. long *get_cookie(long cookie);
  2260.  
  2261. void cdecl sighandler(long arg)
  2262. {
  2263.     register int i;
  2264.       for(i=1; i<MAXWINDOWS; i++)
  2265.       {
  2266.         if(_wind[i].w_state & CHANGED)
  2267.         {
  2268.             if(!strcmp((char *)Wname(&_wind[i]),NAMENLOS))
  2269.                 sprintf((char *)Wname(&_wind[i]),NAMENLOS".%003d",i);
  2270.             _write_file(&_wind[i], (char *)Wname(&_wind[i]), "wb", FALSE, FALSE, SIGTERM);
  2271.           }
  2272.       }
  2273.     Psigreturn();
  2274. }
  2275. #endif
  2276.  
  2277. void main(int argc,char *argv[], char *env[])
  2278. {
  2279.     int event, ap_id, ret, kstate;
  2280.     
  2281.     pinit(isinffile(argc, argv));
  2282.     atexit(pexit);
  2283.  
  2284.  
  2285. #if GEMDOS
  2286.     if(vastart) /* in Diverses einstellbar */
  2287.         if((ap_id=My_appl_find(gl_apid,"7UP     "))>=0 && ap_id!=gl_apid) /* schon gelagen */
  2288.             if(relay(gl_apid,ap_id,argc,argv)) /* versuchen, Parameter zu übergeben */
  2289.                 exit(0);                                /* schon zu Ende */
  2290.  
  2291.     if(get_cookie('MiNT')!=NULL)
  2292.     {
  2293.         Psignal(SIGTERM,sighandler); /* SIGTERM abfangen */
  2294.     }
  2295. /* funktioniert nicht auf dem Falcon
  2296.     ckbd = get_cookie('CKBD');
  2297. */
  2298.     winx = get_cookie('WINX');
  2299.     
  2300.     if(_GemParBlk.global[0]>=0x0400 && 
  2301.         _GemParBlk.global[1]!=1 && 
  2302.         get_cookie('MiNT'))
  2303.         menu_register(gl_apid, VERSION);
  2304.  
  2305.     AVInit(gl_apid,"7UP     ",1|2|16|1024,NULL); /* AV_SENDKEY + AV_ASKFILEFONT + AV_OPENWIND + AV_EXIT */
  2306. #endif
  2307.  
  2308.    registriert = loadlizenz("7UP.KEY");
  2309.    
  2310.    if(!registriert)
  2311.    {
  2312. /*
  2313.         winmenu[MACOPEN].ob_state|=DISABLED;
  2314.         winmenu[MACSAVE].ob_state|=DISABLED;
  2315.         winmenu[MACREC ].ob_state|=DISABLED;
  2316.         winmenu[MACSTOP].ob_state|=DISABLED;
  2317.         winmenu[MACPLAY].ob_state|=DISABLED;
  2318. */
  2319.         shareware[SHAREREGIST].ob_flags|=HIDETREE;
  2320.         form_exhndl(shareware,0,0);
  2321.         shareware[SHAREREGIST].ob_flags&=~HIDETREE;
  2322.     }
  2323.  
  2324.     loadmenu("7UP.MNU");
  2325.     loadshortcuts("7UP.KBD");      /* Defaultshortcuts zuerst laden */
  2326.     loadsoftkeys("7UP.SFK");
  2327.     file_input(argc,argv);
  2328.     checkmenu(winmenu,Wgettop()); /* je nach Aktion, Menu (de)aktivieren */
  2329.  
  2330.     while(TRUE)
  2331.     {
  2332.         event=evnt_event(&mevent);    /* XGEM's event_multi() */
  2333.         if(event & MU_MESAG)
  2334.         {
  2335.             hndl_mesag(msgbuf);
  2336.  
  2337. /* wg. Macro einkommentiert
  2338.             event=0;      /* vermeidet hakeliges Scrolling, weil timerinterrupt */
  2339. */
  2340.         }                    /* übergangen wird                                                */
  2341.         if(event & MU_KEYBD)
  2342.         {
  2343.             hndl_keybd(mevent.e_ks,mevent.e_kr);
  2344.             event=0;      /* s.o. */
  2345.         }
  2346.         if(event & MU_BUTTON)
  2347.         {
  2348.             hndl_button();
  2349.         }
  2350.         if(event & MU_TIMER)
  2351.         {
  2352. #if MiNT
  2353.             wind_update(BEG_UPDATE);
  2354. #endif
  2355.             hndl_timer();
  2356. #if MiNT
  2357.             wind_update(END_UPDATE);
  2358. #endif
  2359.         }
  2360.         if(event & MU_M1)
  2361.         {
  2362.             graf_mouse(M_ON, NULL);
  2363.             mevent.e_m1.g_x=mevent.e_mx;
  2364.             mevent.e_m1.g_y=mevent.e_my;
  2365.             hndl_mm1(winmenu, mevent.e_mx, mevent.e_my);/*toolbar.c*/
  2366.         }
  2367.     }
  2368.